package bsh; import org.junit.Test; import org.junit.runner.RunWith; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import static bsh.TestUtil.eval; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @RunWith(FilteredTestRunner.class) public class GoogleReports { /** * <a href="http://code.google.com/p/beanshell2/issues/detail?id=57">issue#57</a> */ @Test @SuppressWarnings({"ConstantIfStatement"}) public void issue_57() throws Exception { int loopCount = 0; do { loopCount++; if (true) continue; } while (false); assertEquals(1, loopCount); loopCount = (Integer) eval( "int loopCount = 0;", "do{", " loopCount++;", " if (loopCount > 100) return loopCount;", " if (true) continue;", "} while (false);", "return loopCount" ); assertEquals(1, loopCount); loopCount = (Integer) eval( "int loopCount = 0;", "while (loopCount < 1) {", " loopCount++;", " if (loopCount > 100) return loopCount;", " if (true) continue;", "}", "return loopCount" ); assertEquals(1, loopCount); assertEquals(Boolean.TRUE, eval("while(true) { break; return false; } return true;")); assertEquals(Boolean.TRUE, eval("do { break; return false; } while(true); return true;")); loopCount = (Integer) eval( "int loopCount = 0;", "while (++loopCount < 2);", "return loopCount" ); assertEquals(2, loopCount); loopCount = (Integer) eval( "int loopCount = 0;", "do { } while (++loopCount < 2);", "return loopCount" ); assertEquals(2, loopCount); } /** * <a href="http://code.google.com/p/beanshell2/issues/detail?id=60">issue#60</a> */ @Test public void issue_60() throws Exception { final String script = "String foo = null;" + "if (foo != null && foo.length() > 0) return \"not empty\";" + "return \"empty\";"; final ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); scriptEngineManager.registerEngineName("beanshell", new BshScriptEngineFactory()); final ScriptEngine engine = scriptEngineManager.getEngineByName("beanshell"); assertNotNull(engine); Object result; result = engine.eval(script); assertEquals("empty", result); result = eval(script); assertEquals("empty", result); } }